Need for I2C pullup resistors

A lot of Arduino/I2C examples use 2k2 pullup resistors on both lines. I have also found a lot of examples that don't use any pullup resistors because the 328 chip has built in resistors.

This is confusing to me. Do you need to add external pullup resistors or not when you are using I2c?

While it will work with just the internal pull up resistors the waveforms look bad. It will be a more reliable implementation if you use one, that is more immune to noise. I would recommend 4K7 though.

I concur. My own personal experience shows that 4K7 ohm pullups are just right for a benchtop I2C bus length.